Python project - demo
Table of Content
Python project - demo#
- Create project
- Init git
- Add virtual env. install project in
development mode - Install dependencies from requirements-dev.txt
Steps#
- Create root project folder
- Create virtual environment
- Source it
- Create project src sub folder (same as project name)
- Add
__init__.py - At root project folder add
- setup.py
- .gitignore
- .pylintrc
- requirements.txt
- requirements-dev.txt
- README.md
- Init git
- Add and commit files
- Add tests folder
- Write first unit test
- Install
pytestpackage - Config VSCode for using
pytest - Tools set
- black
- isort
- flake8
- pylint
- mypy
project struct
├── py_commonlib
│ ├── hello.py
│ ├── __init__.py
├── requirements-dev.txt
├── requirements.txt
├── setup.py
├── README.md
└── tests
│ └── test_demo.py
├── .gitignore
├── .pylintrc
└── venv
venv
python -m venv venv
source venv/bin/activate
requirements#
requirements
requirements-dev.txt
-r requirements.txt
black
pytest
-
Install dev and runtime packages
(venv)python -m pip install -r requirements-dev.txt -
Install project in
development mode(venv)python -m pip install -e .
Note
Create symlink between virtual env site-packages to project folder
# /venv/lib/python3.10/site-packages
py-commonlib.egg-link
to check
why development mode create xxx.egg-info folder at project root
setup.py#
- Set/Read
install_requiresfromrequirements.txt
Dev packages
dev packages install from requirements-dev.txt
At can be declare and install from setup.py.
I preferred to config only runtime dependencies in setup.py
setup.py
extras_require={"dev": ["flake8", "mypy", "black", "isort"]}
install
# bash
pip install -e .[dev]
# zsh
pip install -e ".[dev]"
from setuptools import setup, find_packages
with open("requirements.txt", "r", encoding="utf-8") as f:
required = f.read().splitlines()
PACKAGE_NAME = "py_commonlib"
setup(
name=PACKAGE_NAME,
version="0.0.1",
author="Author Name",
author_email="author@gmail.com",
description="python pkg for testing python project template",
packages=find_packages(),
install_requires=required,
)
Tests#
- each
testfile start withtestprefix
run from cli#
run testspython -m pytest
#
python -m pytest
git submodules#
Using Git Submodule and Develop Mode to Manage Python Projects